home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / BTH2SRC.ZIP / BTH2.PAS < prev    next >
Pascal/Delphi Source File  |  1995-12-09  |  21KB  |  646 lines

  1. (*
  2.    __ $$m. ____ .mm. ______________ .m$$ _______________________________
  3.    ~~ $$$$ ~~~~ $$$$ ~~~~~~~~~~~~~~ $$$$ .m$$$$$m.
  4.       $$$$$$$m. $$$$ .m$$$$$m. .m$$$$$$$ $$$$ $$$$
  5.       $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$$$$$$   Beyond The Horizon
  6.       $$$$ $$$$ $$$$ $$$$$$$$$ $$$$ $$$$ $$$$              issue #2
  7.       $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$m.         .
  8.       $$$$$$$$~ $$$$ $$$$ $$$$ $$$$$$$$$ $$$$$$$$$         :    .
  9.    ________________________________________________________|____:_______
  10.    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11.  
  12.              coded by : shivan bastard (murray@jax.gulfnet.com)  *)
  13.  
  14.  
  15.  
  16. { source code release notes : the only change i have made is take out the
  17. FLI (vga animation) because it it too elite for you lamerz to rip! }
  18.  
  19. program Beyond_the_Horizon_Issue_2;
  20.  
  21. uses crt,dos,unc,winttt5;
  22.  
  23. type
  24.   ScreenType = array [0..3999] of Byte;
  25.  
  26. var
  27.   ScreenAddr : ScreenType absolute $B800:$0000;
  28.   percent,percent2:real;
  29.   min,n,limit,max,count,i,q,x,y:integer;
  30.   marker,ch:char;
  31.   found,done:boolean;
  32.   output,ansi,screen,af,tf:text;
  33.   s,fn,title,author:string;
  34.   ray:array[1..500] of string[64];
  35.   yy:byte;
  36.  
  37. {$I intro.pas}
  38. {$I main.pas}
  39. {$I reader.pas}
  40. {$I end.pas}
  41. {$L sites.obj}
  42. procedure bbs;external;
  43.  
  44. {$L members.obj}
  45. procedure mem;external;
  46.  
  47. {$L nfo.obj}
  48. procedure edge;external;
  49.  
  50. procedure tc (i: integer); begin textcolor (i);end;
  51. procedure tb (i: integer); begin textbackground (i);end;
  52. procedure nl; begin writeln;end;
  53.  
  54. procedure waitretrace;assembler; {wait for next vertical retrace}
  55. asm
  56.   mov dx,$3DA
  57.   @V1: in al,dx; test al,8; jz @v1;
  58.   @V2: in al,dx; test al,8; jnz @v2;
  59. end;
  60.  
  61. type
  62.   rgb = record r, g, b : byte; end;
  63.   paltype = array[0..255]of rgb;
  64. var
  65.   j : integer;
  66.   pal : paltype;
  67.  
  68. procedure get_color(var pal : paltype); {save palette}
  69. var
  70.   j : integer;
  71. begin
  72.   port[$3C7] := $00;
  73.   for j:= 0 to 255 do begin
  74.     pal[j].r := port[$3C9];
  75.     pal[j].g := port[$3C9];
  76.     pal[j].b := port[$3C9];
  77.   end;
  78. end;
  79.  
  80. procedure set_intensity(intensity : byte);
  81. var
  82.   j : integer;
  83. begin
  84.   port[$3C8] := $00;
  85.   for j := 0 to 255 do begin
  86.     port[$3C9] := pal[j].r*intensity div 63;
  87.     port[$3C9] := pal[j].g*intensity div 63;
  88.     port[$3C9] := pal[j].b*intensity div 63;
  89.   end;
  90. end;
  91.  
  92. procedure set_to_color(r,g,b,h: integer);
  93. var
  94.   j : integer;
  95. begin
  96.   port[$3C8] := $00;
  97.   for j := 0 to 255 do begin
  98.     port[$3C9] := pal[j].r+(r-pal[j].r)*h div 63;
  99.     port[$3C9] := pal[j].g+(g-pal[j].g)*h div 63;
  100.     port[$3C9] := pal[j].b+(b-pal[j].b)*h div 63;
  101.   end;
  102. end;
  103.  
  104. procedure fade_out(t : integer); {fades from pal to black}
  105. begin
  106.   for j := 63 downto 0 do begin waitretrace; set_intensity(j); delay(t); end;
  107. end;
  108.  
  109. procedure fade_in(t : integer);  {fades from black to pal}
  110. begin
  111.   for j := 0 to 63 do begin waitretrace; set_intensity(j); delay(t); end;
  112. end;
  113.  
  114. procedure flash_in(r,b,g: byte;t : integer); {fades from pal to color}
  115. begin
  116.   for j := 0 to 63 do begin waitretrace; set_to_color(r,b,g,j); delay(t); end;
  117. end;
  118.  
  119. procedure flash_out(r,g,b: byte;t : integer); {fades from color to pal}
  120. begin
  121.   for j := 63 downto 0 do begin waitretrace;set_to_color(r,g,b,j);delay(t);end;
  122. end;
  123.  
  124. procedure drawmain;
  125. begin
  126.   tc(8);
  127.   gotoxy(58,16);write('  Introduction  ');
  128.   gotoxy(58,17);write('   Blade Info   ');
  129.   gotoxy(58,18);write('    Articles    ');
  130.   gotoxy(58,19);write('   Interviews   ');
  131.   gotoxy(58,20);write('   Best ANSIs   ');tb(0);
  132. end;
  133.  
  134. procedure showmain (i: integer);
  135. begin
  136.   tc (11);
  137.   if y=16 then begin gotoxy(58,y);write('  Introduction');end;
  138.   if y=17 then begin gotoxy(58,y);write('   Blade Info ');end;
  139.   if y=18 then begin gotoxy(58,y);write('    Articles  ');end;
  140.   if y=19 then begin gotoxy(58,y);write('   Interviews ');end;
  141.   if y=20 then begin gotoxy(58,y);write('   Best ANSIs ');end;tb(0);
  142. end;
  143.  
  144. procedure drawintro;
  145. begin
  146.   tc(8);
  147.   gotoxy(58,16);write('  Introduction  ');
  148.   gotoxy(58,17);write('  Coders Notes  ');
  149.   gotoxy(58,18);write('  Contributors  ');
  150.   gotoxy(58,19);write(' Contacting BTH ');
  151.   gotoxy(58,20);write('                ');tb(0);
  152. end;
  153.  
  154. procedure showintro (i: integer);
  155. begin
  156.   tc (11);
  157.   if y=16 then begin gotoxy(58,y);write('  Introduction');end;
  158.   if y=17 then begin gotoxy(58,y);write('  Coders Notes');end;
  159.   if y=18 then begin gotoxy(58,y);write('  Contributors');end;
  160.   if y=19 then begin gotoxy(58,y);write(' Contacting BTH');end;tb(0);
  161. end;
  162.  
  163. procedure drawblade;
  164. begin
  165.   tc(8);
  166.   gotoxy(58,16);write(' The Edge 12/95 ');
  167.   gotoxy(58,17);write('     Members    ');
  168.   gotoxy(58,18);write('      Sites     ');
  169.   gotoxy(58,19);write('                ');
  170.   gotoxy(58,20);write('                ');tb(0);
  171. end;
  172.  
  173. procedure showblade (i: integer);
  174. begin
  175.   tc (11);
  176.   if y=16 then begin gotoxy(58,y);write(' The Edge 12/95');end;
  177.   if y=17 then begin gotoxy(58,y);write('     Members');end;
  178.   if y=18 then begin gotoxy(58,y);write('      Sites');end;tb(0);
  179. end;
  180.  
  181. procedure drawarticles;
  182. begin
  183.   tc(8);
  184.   gotoxy(58,16);write('   ''The Scene''   ');
  185.   gotoxy(58,17);write('    Acid Pack    ');
  186.   gotoxy(58,18);write('   Legend Pack   ');
  187.   gotoxy(58,19);write('                 ');
  188.   gotoxy(58,20);write('                 ');tb(0);
  189. end;
  190.  
  191. procedure showarticles (i: integer);
  192. begin
  193.   tc (11);
  194.   if y=16 then begin gotoxy(58,y);write('   ''The Scene''');end;
  195.   if y=17 then begin gotoxy(58,y);write('    Acid Pack');end;
  196.   if y=18 then begin gotoxy(58,y);write('   Legend Pack');end;
  197.   if y=19 then begin gotoxy(58,y);write('             ');end;tb(0);
  198. end;
  199.  
  200. procedure drawinterview;
  201. begin
  202.   tc(8);
  203.   gotoxy(58,16);write('      kuma      ');
  204.   gotoxy(58,17);write('subconsciousness');
  205.   gotoxy(58,18);write('  modeus khahn  ');
  206.   gotoxy(58,19);write('                ');
  207.   gotoxy(58,20);write('                ');tb(0);
  208. end;
  209.  
  210. procedure showinterview (i: integer);
  211. begin
  212.   tc (11);
  213.   if y=16 then begin gotoxy(58,y);write('      kuma');end;
  214.   if y=17 then begin gotoxy(58,y);write('subconsciousness');end;
  215.   if y=18 then begin gotoxy(58,y);write('  modeus khahn');end;
  216.   if y=19 then begin gotoxy(58,y);write('             ');end;tb(0);
  217. end;
  218.  
  219. procedure drawpics;
  220. begin
  221.   tc (8);
  222.   gotoxy(58,16);write('    Number 1    ');
  223.   gotoxy(58,17);write('    Number 2    ');
  224.   gotoxy(58,18);write('    Number 3    ');
  225.   gotoxy(58,19);write('Reviewer''s Notes');
  226.   gotoxy(58,20);write('                ');tb(0);
  227. end;
  228.  
  229. procedure showpics (I:integer);
  230. begin
  231.   tc(11);
  232.   if y=16 then begin gotoxy(58,y);write('    Number 1    ');end;
  233.   if y=17 then begin gotoxy(58,y);write('    Number 2    ');end;
  234.   if y=18 then begin gotoxy(58,y);write('    Number 3    ');end;
  235.   if y=19 then begin gotoxy(58,y);write('Reviewer''s Notes');end;tb(0);
  236. end;
  237.  
  238. Procedure ansiscroll;
  239. begin
  240.   directvideo := false;
  241.   {$I-}
  242.   reset(ansi);
  243.   {$I+}
  244.   if ioresult <> 0 then
  245.     begin
  246.       writeln('BTH Data File : ANSI.DAT not found! ');
  247.       halt;
  248.     end;
  249.   Assign(output, '');Rewrite(output);clrscr;found:=false;
  250.   repeat
  251.      begin readln(ansi,ch);if ch=marker then found:=true;end;
  252.   until found;
  253.   repeat
  254.   begin
  255.     read(ansi,ch);write(output,ch);
  256.   end;
  257.   until ch=marker;
  258.   gotoxy(1,25);writeln('                          Press any key to continue ...');
  259.   close(ansi);ch:=readkey;
  260.   sliderestorescreen(1,up);disposescreen(1);
  261. end;
  262.  
  263. procedure sitescroll;
  264. begin
  265. y:=0;
  266. repeat
  267.   move (@bbs^,memw[$b800:y*160],6720); {move-source,destination,size}
  268.   ch:=upcase(readkey);
  269.   if ch=#80 then begin
  270.     move(memw[$b800:160],memw[$b800:0],9440);
  271.     dec(y); {if press down then decrease Y}
  272.     end;
  273.   if ch=#72 then begin
  274.     if y>0 then move(memw[$b800:0],memw[$b800:160],9440);
  275.     if y>0 then inc(y); {if press up then increase Y}
  276.     end;
  277. until ch=#27;  {Until ESC is pressed}
  278. sliderestorescreen(1,up);disposescreen(1);
  279. end;
  280.  
  281. procedure edgescroll;
  282. begin
  283. y:=0;
  284. repeat
  285.   move (@edge^,memw[$b800:y*160],16640); {move-source,destination,size}
  286.   ch:=upcase(readkey);
  287.   if ch=#80 then begin
  288.     move(memw[$b800:160],memw[$b800:0],9440);
  289.     dec(y); {if press down then decrease Y}
  290.     end;
  291.   if ch=#72 then begin
  292.     if y>0 then move(memw[$b800:0],memw[$b800:160],9440);
  293.     if y>0 then inc(y); {if press up then increase Y}
  294.     end;
  295. until ch=#27;  {Until ESC is pressed}
  296. sliderestorescreen(1,up);disposescreen(1);
  297. end;
  298.  
  299. procedure memberscroll;
  300. begin
  301. y:=0;
  302. repeat
  303.   move (@mem^,memw[$b800:y*160],9600); {move-source,destination,size}
  304.   ch:=upcase(readkey);
  305.   if ch=#80 then begin
  306.     move(memw[$b800:160],memw[$b800:0],9440);
  307.     dec(y); {if press down then decrease Y}
  308.     end;
  309.   if ch=#72 then begin
  310.     if y>0 then move(memw[$b800:0],memw[$b800:160],9440);
  311.     if y>0 then inc(y); {if press up then increase Y}
  312.     end;
  313. until ch=#27;  {Until ESC is pressed}
  314. sliderestorescreen(1,up);disposescreen(1);
  315. end;
  316.  
  317. Procedure scroller;
  318.  procedure clear;
  319.  begin
  320.  for i:=1 to 500 do
  321.   ray[i]:=' ';
  322.  end;
  323.  
  324.  procedure scroll;
  325.   begin
  326.     if q<1 then q:=1;
  327.     if limit>20 then
  328.      if q>limit then q:=limit;
  329.     x:=9;y:=6;tb(1);tc(15);
  330.     for i:=1 to 15 do
  331.     begin
  332.     gotoxy(x,y);write('                                                                ');
  333.     gotoxy(x,y);writeln(ray[q]);y:=y+1;q:=q+1;
  334.     end;
  335.     tc(15);tb(7);gotoxy(65,23);write('[',q,'/',max,']   ');
  336.     tb(0);tc(15);tb(1);
  337.     percent:=100 * (q / max);
  338.     percent2:=percent/(100/7);
  339.  
  340. {*  alright this is the messiest part of my code. all this does is
  341.     make a scroll bar on the side, its not very efficient, but it works
  342.     could've probably made some weird complicated loop, but chose instead to
  343.     go with the cut n' paste method heh. =) *}
  344.  
  345.     if percent2 > 0 then begin if percent2 <2 then begin
  346.       tc(15);tb(1);gotoxy(77,10);write('▓');
  347.       gotoxy(77,11);tc(1);tb(7);write('▓');
  348.       gotoxy(77,12);tc(1);tb(7);write('▓');
  349.       gotoxy(77,13);tc(1);tb(7);write('▓');
  350.       gotoxy(77,14);tc(1);tb(7);write('▓');
  351.       gotoxy(77,15);tc(1);tb(7);write('▓');
  352.       gotoxy(77,16);tc(1);tb(7);write('▓');end;end;
  353.     if percent2 > 2 then begin if percent2 <3 then begin
  354.       tc(15);tb(1);gotoxy(77,11);write('▓');
  355.       gotoxy(77,10);tc(1);tb(7);write('▓');
  356.       gotoxy(77,12);tc(1);tb(7);write('▓');
  357.       gotoxy(77,13);tc(1);tb(7);write('▓');
  358.       gotoxy(77,14);tc(1);tb(7);write('▓');
  359.       gotoxy(77,15);tc(1);tb(7);write('▓');
  360.       gotoxy(77,16);tc(1);tb(7);write('▓');end;end;
  361.     if percent2 > 3 then begin if percent2 < 4 then begin
  362.       tc(15);tb(1);gotoxy(77,12);write('▓');
  363.       gotoxy(77,10);tc(1);tb(7);write('▓');
  364.       gotoxy(77,11);tc(1);tb(7);write('▓');
  365.       gotoxy(77,13);tc(1);tb(7);write('▓');
  366.       gotoxy(77,14);tc(1);tb(7);write('▓');
  367.       gotoxy(77,15);tc(1);tb(7);write('▓');
  368.       gotoxy(77,16);tc(1);tb(7);write('▓');end;end;
  369.     if percent2 > 4 then begin if percent2<5 then begin
  370.       tc(15);tb(1);gotoxy(77,13);write('▓');
  371.       gotoxy(77,10);tc(1);tb(7);write('▓');
  372.       gotoxy(77,11);tc(1);tb(7);write('▓');
  373.       gotoxy(77,12);tc(1);tb(7);write('▓');
  374.       gotoxy(77,14);tc(1);tb(7);write('▓');
  375.       gotoxy(77,15);tc(1);tb(7);write('▓');
  376.       gotoxy(77,16);tc(1);tb(7);write('▓');end;end;
  377.     if percent2 > 5 then begin if percent2<6 then begin
  378.       tc(15);tb(1);gotoxy(77,14);write('▓');
  379.       gotoxy(77,10);tc(1);tb(7);write('▓');
  380.       gotoxy(77,11);tc(1);tb(7);write('▓');
  381.       gotoxy(77,12);tc(1);tb(7);write('▓');
  382.       gotoxy(77,13);tc(1);tb(7);write('▓');
  383.       gotoxy(77,15);tc(1);tb(7);write('▓');
  384.       gotoxy(77,16);tc(1);tb(7);write('▓');end;end;
  385.     if percent2 > 6 then begin if percent2<7 then begin
  386.       tc(15);tb(1);gotoxy(77,15);write('▓');
  387.       gotoxy(77,10);tc(1);tb(7);write('▓');
  388.       gotoxy(77,11);tc(1);tb(7);write('▓');
  389.       gotoxy(77,12);tc(1);tb(7);write('▓');
  390.       gotoxy(77,13);tc(1);tb(7);write('▓');
  391.       gotoxy(77,14);tc(1);tb(7);write('▓');
  392.       gotoxy(77,16);tc(1);tb(7);write('▓');end;end;
  393.     if percent2 >= 7 then begin tc(15);tb(1);gotoxy(77,16);write('▓');
  394.       gotoxy(77,10);tc(1);tb(7);write('▓');
  395.       gotoxy(77,11);tc(1);tb(7);write('▓');
  396.       gotoxy(77,12);tc(1);tb(7);write('▓');
  397.       gotoxy(77,13);tc(1);tb(7);write('▓');
  398.       gotoxy(77,14);tc(1);tb(7);write('▓');
  399.       gotoxy(77,15);tc(1);tb(7);write('▓');end;
  400.       tb(0);
  401.   end;
  402.  
  403. begin
  404. fade_out(20);readeransi;fade_in(1);Flash_Out(100,16,32,20);
  405. tb(7);tc(0);gotoxy(12,2);write(title);gotoxy(12,3);write(author);tb(0);tc(15);
  406. done:=false;
  407. assign(tf,'bth2.dat');
  408. {$I-}
  409. reset(tf);
  410. {$I+}
  411. if ioresult <> 0 then
  412.   begin
  413.     writeln('BTH Data File : BTH2.DAT not found! ');
  414.     halt;
  415.   end;
  416.  
  417. repeat
  418. readln(tf,s);
  419. until s=fn;
  420. readln(tf,max);limit:=max-13;
  421. for i:=1 to max do readln(tf,ray[i]);
  422.   close(tf);max:=max+2;
  423.   q:=1;scroll;
  424.   repeat
  425.     ch:=upcase(readkey);
  426.     if max > 16 then begin
  427.       (* down scroll *)
  428.       if ch=#80 then
  429.       begin
  430.       q:=q-14;scroll;
  431.       end;
  432.       (* up scroll *)
  433.       if ch=#72 then
  434.       begin
  435.       q:=q-16;scroll;
  436.       end;
  437.       (* page down *)
  438.       if ch=#81 then
  439.       begin
  440.       scroll;
  441.       end;
  442.       (* page up *)
  443.       if ch=#73 then
  444.       begin
  445.       q:=q-30;scroll;
  446.       end;
  447.       (* home key *)
  448.       if ch=#71 then
  449.       begin
  450.       tc(1);tb(7);for n:=11 to 16 do begin
  451.       gotoxy(77,n);write('▓');end;
  452.       q:=1;scroll;
  453.       end;
  454.       (* end key *)
  455.       if ch=#79 then
  456.       begin
  457.       tc(1);tb(7);for n:=10 to 15 do begin
  458.       gotoxy(77,n);write('▓');end;
  459.       q:=max;scroll;
  460.       end;
  461.     end;
  462.     (* exit reader *)
  463.     if ch=#27 then done:=true;
  464.   until done;done:=false;clear;
  465.   sliderestorescreen(1,up);disposescreen(1);
  466. end;
  467.  
  468. procedure introduction;
  469. begin
  470.   drawintro;showintro (y);count:=1;
  471.   repeat
  472.   if keypressed=true then begin ch := upcase (readkey);
  473.     (*=-  when the hit [esc]  -=*)
  474.     if ch = #27 then done := true;
  475.     if ch = #0 then begin ch := readkey;
  476.       (*=-  Up arror/cursor crap  -=*)
  477.       if ch = #72 then begin if wherey <> 16 then begin
  478.       dec (y);drawintro;showintro (y);end;end;
  479.       (*=- Down arror/cursor crap -=*)
  480.       if ch = #80 then begin if wherey <> 19 then begin
  481.         inc(y);drawintro;showintro(y);end;end;end;
  482.     (*=-  when they hit enter  -=*)
  483.     if ch = #13 then begin
  484.     if y=16 then begin savescreen(1);fn:='intro.bth';title:='BTH Issue #2 Introduction';author:='Mindcrime';
  485.     scroller;y:=16;drawintro;showintro(y);continue;end;
  486.     if y=17 then begin savescreen(1);fn:='notes.bth';title:='Programmers Notes';author:='shivan bastard';
  487.     scroller;y:=17;drawintro;showintro(y);continue;end;
  488.     if y=18 then begin savescreen(1);fn:='credits.bth';title:='BTH Credits';author:='BTH Staff';
  489.     scroller;y:=18;drawintro;showintro(y);continue;end;
  490.     if y=19 then begin savescreen(1);fn:='contact.bth';title:='How to contribute';author:='BTH Staff';
  491.     scroller;y:=19;drawintro;showintro(y);continue;end;
  492.   end;
  493.   end;
  494.   until done;tb (0);done:=false;
  495. end;
  496.  
  497. procedure blade;
  498. begin
  499.   drawblade;showblade (y);count:=1;
  500.   repeat
  501.   if keypressed=true then begin ch := upcase (readkey);
  502.     (*=-  when the hit [esc]  -=*)
  503.     if ch = #27 then done := true;
  504.     if ch = #0 then begin ch := readkey;
  505.       (*=-  Up arror/cursor crap  -=*)
  506.       if ch = #72 then begin if wherey <> 16 then begin
  507.       dec (y);drawblade;showblade (y);end;end;
  508.       (*=- Down arror/cursor crap -=*)
  509.       if ch = #80 then begin if wherey <>18 then begin
  510.         inc(y);drawblade;showblade(y);end;end;end;
  511.     (*=-  when they hit enter  -=*)
  512.     if ch = #13 then begin
  513.     if y=16 then begin savescreen(1);
  514.     edgescroll;y:=16;drawblade;showblade(y);continue;end;
  515.     if y=17 then begin savescreen(1);
  516.     memberscroll;y:=17;drawblade;showblade(y);continue;end;
  517.     if y=18 then begin savescreen(1);
  518.     sitescroll;y:=18;drawblade;showblade(y);continue;end;
  519.   end;end;
  520.   until done;tb (0);done:=false;
  521. end;
  522.  
  523. procedure articles;
  524. begin
  525.   drawarticles;showarticles(y);count:=1;
  526.   repeat
  527.   if keypressed=true then begin ch := upcase (readkey);
  528.     (*=-  when the hit [esc]  -=*)
  529.     if ch = #27 then done := true;
  530.     if ch = #0 then begin ch := readkey;
  531.       (*=-  Up arror/cursor crap  -=*)
  532.       if ch = #72 then begin if wherey <> 16 then begin
  533.       dec (y);drawarticles;showarticles (y);end;end;
  534.       (*=- Down arror/cursor crap -=*)
  535.       if ch = #80 then begin if wherey <> 18 then begin
  536.         inc(y);drawarticles;showarticles(y);end;end;end;
  537.     (*=-  when they hit enter  -=*)
  538.     if ch = #13 then begin
  539.     if y=16 then begin savescreen(1);fn:='article.1';title:='''the scene''';author:='Belial';
  540.     scroller;y:=16;drawarticles;showarticles(y);continue;end;
  541.     if y=17 then begin savescreen(1);fn:='article.2';title:='The ACiD Pack';author:='Shivan Bastard and Pushead';
  542.     scroller;y:=17;drawarticles;showarticles(y);continue;end;
  543.     if y=18 then begin savescreen(1);fn:='article.3';title:='The Legend Pack';author:='Shivan Bastard and Pushead';
  544.     scroller;y:=18;drawarticles;showarticles(y);continue;end;
  545.   end;end;
  546.   until done;tb (0);done:=false;
  547. end;
  548.  
  549. procedure interviews;
  550. begin
  551.   drawinterview;showinterview(y);count:=1;
  552.   repeat
  553.   if keypressed=true then begin ch := upcase (readkey);
  554.     (*=-  when the hit [esc]  -=*)
  555.     if ch = #27 then done := true;
  556.     if ch = #0 then begin ch := readkey;
  557.       (*=-  Up arror/cursor crap  -=*)
  558.       if ch = #72 then begin if wherey <> 16 then begin
  559.       dec (y);drawinterview;showinterview(y);end;end;
  560.       (*=- Down arror/cursor crap -=*)
  561.       if ch = #80 then begin if wherey <> 18 then begin
  562.         inc(y);drawinterview;showinterview(y);end;end;end;
  563.     (*=-  when they hit enter  -=*)
  564.     if ch = #13 then begin
  565.     if y=16 then begin savescreen(1);fn:='iv.1';title:='Interview with Kuma';author:='Shivan Bastard';
  566.     scroller;y:=16;drawinterview;showinterview(y);continue;end;
  567.     if y=17 then begin savescreen(1);fn:='iv.2';title:='Interview with Subconsciousness';author:='Shivan Bastard';
  568.     scroller;y:=17;drawinterview;showinterview(y);continue;end;
  569.     if y=18 then begin savescreen(1);fn:='iv.3';title:='Interview with Modeus Khahn';author:='Shivan Bastard';
  570.     scroller;y:=18;drawinterview;showinterview(y);continue;end;
  571.   end;end;
  572.   until done;tb (0);done:=false;
  573. end;
  574.  
  575. procedure pics;
  576. begin
  577.   drawpics;showpics(y);count:=1;
  578.   repeat
  579.   if keypressed=true then begin ch := upcase (readkey);
  580.     (*=-  when the hit [esc]  -=*)
  581.     if ch = #27 then done := true;
  582.     if ch = #0 then begin ch := readkey;
  583.       (*=-  Up arror/cursor crap  -=*)
  584.       if ch = #72 then begin if wherey <> 16 then begin
  585.       dec (y);drawpics;showpics(y);end;end;
  586.       (*=- Down arror/cursor crap -=*)
  587.       if ch = #80 then begin if wherey <>19 then begin
  588.         inc(y);drawpics;showpics(y);end;end;end;
  589.     (*=-  when they hit enter  -=*)
  590.     if ch = #13 then begin
  591.     if y=16 then begin savescreen(1);marker:=#1;
  592.     ansiscroll;y:=16;drawpics;showpics(y);continue;end;
  593.     if y=17 then begin savescreen(1);marker:=#2;
  594.     ansiscroll;y:=17;drawpics;showpics(y);continue;end;
  595.     if y=18 then begin savescreen(1);marker:=#3;
  596.     ansiscroll;y:=18;drawpics;showpics(y);continue;end;
  597.     if y=19 then begin savescreen(1);fn:='notes.rev';
  598.     title:='Reviewer''s Notes';Author:='Pushead + Shivan Bastard';
  599.     scroller;y:=19;drawpics;showpics(y);continue;end;
  600.   end;end;
  601.   until done;tb (0);done:=false;
  602. end;
  603.  
  604. procedure mainmenu;
  605.   begin
  606.   memw[$0000:$041a]:=memw[$0000:$041c];
  607.   drawmain;showmain (y);count:=1;
  608.   repeat
  609.   if keypressed=true then begin ch := upcase (readkey);
  610.     (*=-  when the hit [esc]  -=*)
  611.     if ch = #27 then done := true;
  612.     if ch = #0 then begin ch := readkey;
  613.       (*=-  Up arror/cursor crap  -=*)
  614.       if ch = #72 then begin if wherey <> 16 then begin
  615.       dec (y);drawmain;showmain (y);end;end;
  616.       (*=- Down arror/cursor crap -=*)
  617.       if ch = #80 then begin if wherey <> 20 then begin
  618.         inc(y);drawmain;showmain(y);end;end;end;
  619.     (*=-  when they hit enter  -=*)
  620.     if ch = #13 then begin
  621.     if y=16 then begin y:=16;introduction;y:=16;drawmain;showmain(y);continue;end;
  622.     if y=17 then begin y:=16;blade;y:=17;drawmain;showmain(y);continue;end;
  623.     if y=18 then begin y:=16;articles;y:=18;drawmain;showmain(y);continue;end;
  624.     if y=19 then begin y:=16;interviews;y:=19;drawmain;showmain(y);continue;end;
  625.     if y=20 then begin y:=16;pics;y:=20;drawmain;showmain(y);continue;end;
  626.     end;
  627.     end;
  628.   until done;tb(0);
  629. end;
  630.  
  631. begin
  632.   tc(15);tb(0);assign(ansi,'ansi.dat');
  633.   {$I-}
  634.   reset(ansi);
  635.   {$I+}
  636.   if ioresult <> 0 then
  637.     begin
  638.       writeln('BTH Data file : ANSI.DAT not found! ');
  639.       halt;
  640.     end;
  641.   fn:='bth2.dat';get_color(pal);offcursor;
  642.   fade_out(30);clrscr;introansi;fade_in(30);ch:=readkey;fade_out(30);offcursor;fade_out(1);
  643.   clrscr;y:=16;mainansi;fade_in(20);mainmenu;
  644.   fade_out(20);clrscr;endansi;fade_in(30);gotoxy(1,24);oncursor;
  645. end.
  646.